package com.suian.spring.thread.future;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class MyTestMain {
    public static void main(String[] args) throws ExecutionException, InterruptedException {


        //1、创建myCallable
        MyCallable myCallable = new MyCallable();
        //2、创建FutureTask 传入callable
        FutureTask futureTask = new FutureTask<>(myCallable);
        //创建Thread线程
        Thread t1 = new Thread(futureTask);
        //启动线程
        t1.start();
        //要结果，call方法的返回值会存储到outcome变量中

        /*
         *FutureTask中有两个变量state,outcome
         * 1、state记录线程的状态，outcome记录着Callable接口rcall方法的返回值
         * 2、当FutureTask线程开启时，state处于为完成状态，
         * 当调用get()方法时，如果是未完成状态，那么当前线程会阻塞，
         * 直到call方法完成后，outcome拿到call的返回值，然后将state置为完成，当前线程结束阻塞
         */
        Object count = futureTask.get();


        System.out.println("总和为："+count);
    }
}
